package org.groupg.mockdatabyspring.template.model;

import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;

/**
 * 模板创建用继承对象，针对不同势力，比如 String模板 以及 数字类型模板都需要处理
 *
 * @param <T> String 或 Double 或 Integer
 */
@Setter
@Getter
public abstract class TemplateCreate<T> {

    /**
     * 模板id
     */
    protected String tmpId = "";
    /**
     * 模板名称
     */
    protected String tmpName = "";
    /**
     * 模板正则表达式
     */
    protected String templateRegex = "";

    /**
     * 默认的构造方法
     *
     * @param tmpId         模板id
     * @param tmpName       模板的名字
     * @param templateRegex 模板的正则表达式
     */
    public TemplateCreate(@NotNull(message = "生成器的ID不能为空") String tmpId, String tmpName, @NotNull(message = "生成器的正则表达式不能为空") String templateRegex) {
        this.tmpId = tmpId;
        this.tmpName = tmpName;
        this.templateRegex = templateRegex;
    }

    /**
     * 模板生成内容的方法（需要子类实现）
     *
     * @return 需要抽象实现的接口对象
     */
    public abstract T createStr();
}
